From: Owen Taylor Date: Mon, 1 Dec 2008 19:59:59 +0000 (+0000) Subject: Bug 562771 – The clock is inaccurate X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~11542 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=dd4db8247545dffb2e72f010ec01a9ca5235b7c4;p=gnome-shell.git Bug 562771 – The clock is inaccurate Fix the clock to update exactly on the minute, rather than at a random time within the minute. Patch from RainCT (Siegfried Gevatter) svn path=/trunk/; revision=98 --- diff --git a/js/ui/panel.js b/js/ui/panel.js index 2c37a7dd8..cbbed8d40 100644 --- a/js/ui/panel.js +++ b/js/ui/panel.js @@ -94,8 +94,8 @@ Panel.prototype = { global.stage.add_actor(this._group); + // Start the clock this._updateClock(); - this._startClock(); }, // Struts determine the area along each side of the screen that is reserved @@ -122,19 +122,20 @@ Panel.prototype = { } }, - _startClock: function() { - let me = this; - // TODO: this makes the clock updated every 60 seconds, but not necessarily on the minute, so it is inaccurate - Mainloop.timeout_add_seconds(60, - function() { - me._updateClock(); - return true; - }); - }, - _updateClock: function() { - this._clock.set_text(new Date().toLocaleFormat("%H:%M")); - return true; + let me = this; + let display_date = new Date(); + let msec_remaining = 60000 - (1000 * display_date.getSeconds() + + display_date.getMilliseconds()); + if (msec_remaining < 500) { + display_date.setMinutes(display_time.getMinutes() + 1); + msec_remaining += 60000; + } + this._clock.set_text(display_date.toLocaleFormat("%H:%M")); + Mainloop.timeout_add(msec_remaining, function() { + me._updateClock(); + return false; + }); }, overlayHidden: function() {